package com.kun.reflection.demo02_memoryAnalysis;


//分析主动调用和被动调用的区别，是否引起类的初始化
public class Test02_classInitCondition {

    //1. main启动类的静态代码块
    static {
        System.out.println("Main启动类的静态代码块");
    }

    public static void main(String[] args) throws ClassNotFoundException {
        //主动调用
        //Son son = new Son();        //2. 主动创建对象
        //System.out.println(Son.b);      //3. 访问子类静态变量
        //Class.forName("com.kun.reflection.demo02_memoryAnalysis.Son"); //4. 反射
        //Son son = new Son();        //5. 初始化类，优先初始化其父类

        //被动调用
        //System.out.println(Son.a);//1. 访问父类静态域，只有父类被初始化
        //Son[] sons = new Son[10];    //2. 使用数组定义类的引用
        System.out.println(Son.C);//3. 引用常量，不会引起类的初始化
    }



}


class Father{
    static int a = 1;
    final int B = 2;
    static {
        System.out.println("父类静态代码块");
    }
}

class Son extends Father{
    static int b = 3;
    static final int C = 4;
    static {
        System.out.println("子类静态代码块");
    }
}

